package cn.bonoon.kernel.support.services;

import java.util.Collection;
import java.util.List;

import cn.bonoon.entities.plugins.AccountEntity;
import cn.bonoon.entities.plugins.ShortcutMenuEntity;
import cn.bonoon.kernel.menus.ChannelInfo;
import cn.bonoon.kernel.menus.IModuleInfo;
import cn.bonoon.kernel.menus.ItemInfo;
import cn.bonoon.kernel.menus.TabInfo;
import cn.bonoon.kernel.security.PrivilegeChecker;
import cn.bonoon.kernel.support.IOperator;

/**
 * <pre>
 * 用户的操作接口，在每个功能中，已经登录的用户可以通过这个接口进行一些系统级的操作，如：读取用户权限等
 * 
 * 该接口在框架的管理模块实现
 * </pre>
 * 
 * @author jackson
 * 
 */
public interface UserService {

	AccountEntity get(Long id);

	// List<RoleEntity> getRoles(Long uid);

	PrivilegeChecker privilege(IOperator user, ItemInfo item);

	List<String> getMenuIds(Long userId, ChannelInfo item);

	PrivilegeChecker privilege(IOperator user, IModuleInfo module);

	PrivilegeChecker privilege(IOperator user, TabInfo tab);

//	/**
//	 * 定义为跨子系统的菜单
//	 * 
//	 * @return
//	 */
//	List<ShortcutMenuEntity> getHostShortcutMenus();

	List<Long> getActions(ItemInfo item, IOperator user);

	Collection<String> accessableModules(IOperator user);

	/**
	 * 取出快捷菜单的同时，需要根据当前用户的权限对已经定义的快捷菜单进行过滤
	 * @param opt
	 * @param moduleId
	 * @return
	 */
	List<ShortcutMenuEntity> shortcutMenus(IOperator opt, String moduleId);
	
	PrivilegeChecker privilege(IOperator user, String mid, String cid);
}
